package com.shujia.day08;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class Demo06MyDefineClass2ListRemove {
    public static void main(String[] args) {
        /*
            对于自定义类使用List中的方法
         */
        List<Stu> stus = new ArrayList<>();
        Stu stu = new Stu("陆玉龙", 18, "bigdata30");
        stus.add(stu);
        stus.add(new Stu("徐玉娟",18,"bigdata30"));

        /*
            TODO remove的源码：
            public boolean remove(Object o) {
                // 对象等于null
                if (o == null) {
                    for (int index = 0; index < size; index++)
                        if (elementData[index] == null) {
                            fastRemove(index);
                            return true;
                        }
                } else {
                    // 不为null
                    for (int index = 0; index < size; index++)
                        // 遍历 elementData中所有的数据 并使用equals方法对其进行比较
                        //   由于当前Stu没有重写equals方法，所以使用的是Object中继承的 默认使用 == 判断
                        if (o.equals(elementData[index])) {
                            fastRemove(index);
                            return true;
                        }
                }
                return false;
            }
         */
        stus.remove(stu);
        stus.remove(new Stu("徐玉娟",18,"bigdata30"));
        System.out.println(stus);

    }
}
class Stu{
    String name;
    int age;
    String clazz;

    public Stu(String name, int age, String clazz) {
        this.name = name;
        this.age = age;
        this.clazz = clazz;
    }

    @Override
    public String toString() {
        return "Stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", clazz='" + clazz + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Stu stu = (Stu) o;
        return age == stu.age && Objects.equals(name, stu.name) && Objects.equals(clazz, stu.clazz);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, clazz);
    }
}
